package com.rem.chat.service;

import com.rem.chat.pojo.request.ApplyAddRequest;
import com.rem.chat.pojo.request.ApplyDealWithRequest;
import com.rem.chat.pojo.request.PageRequest;
import com.rem.chat.pojo.request.ContactSearchRequest;
import com.rem.chat.pojo.response.GetContactInfoResponse;
import com.rem.chat.pojo.response.LoadAllApplyResponse;
import com.rem.chat.pojo.response.LoadContactResponse;
import com.rem.chat.pojo.response.SearchContactResponse;
import com.rem.chat.service.dto.AddContactDTO;
import com.rem.chat.service.dto.UserLoginDTO;

import java.util.List;

public interface ContactService {
    /**
     * 搜索联系人（用户、群组）
     * @param request 用户id、联系人 id
     * @return 联系人信息
     */
    List<SearchContactResponse> searchContact(ContactSearchRequest request);

    /**
     * 申请好友 | 入群申请
     * @param user 申请人信息
     * @param request 联系人id、申请信息
     * @return 是否申请成功
     */
    Boolean applyAdd(UserLoginDTO user, ApplyAddRequest request);

    /**
     * 查询申请列表
     * @param userId 用户 id
     * @param param 分页参数
     * @return 申请列表
     */
    LoadAllApplyResponse loadApply(String userId, PageRequest param);

    /**
     * 处理好友申请
     * @param userId 用户 id
     * @param param 申请id、申请状态（同意、拒绝...）
     * @return 是否执行成功
     */
    Boolean dealWithApply(String userId, ApplyDealWithRequest param);

    /**
     * 添加联系人
     * @param addContactDTO 申请好友信息
     */
    void addContact(AddContactDTO addContactDTO);

    /**
     * 获取联系人列表（用户 | 群组）
     * @param userId 用户 id
     * @param contactType 联系人类型
     * @return 联系人列表
     */
    List<LoadContactResponse> loadContact(String userId, Integer contactType);

    /**
     * 获取联系人信息
     * @param userId 用户 id
     * @param contactId 联系人 id
     * @return 联系人信息
     */
    GetContactInfoResponse getContactInfo(String userId, String contactId);

    /**
     * 将机器人添加为好友
     * @param userId 用户id
     */
    void addRobotContact(String userId);
}
